package com.ptrsystem.siatd.dao.implementacion;

import com.ptrsystem.siatd.beans.GenDocPersonal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
public class MantenimientoGenDocPersonalImplement implements com.ptrsystem.siatd.dao.interfaces.MantenimientoGenDocPersonalInterface {

    @Autowired
    private DataSource dataSource;

    @Override
    @Transactional
    public boolean getRegistraGenDocPers(GenDocPersonal genDocPer) {
        boolean rt = false;
        JdbcTemplate jdbc = new JdbcTemplate(this.dataSource);
        int rs = jdbc.update("insert into TD_GEN_DOC_PERSONAL values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", genDocPer.getCodTipoDoc(),
                genDocPer.getNroEmisionDocAdm(),
                genDocPer.getNroTipoDocPers(),
                genDocPer.getNomTipoDocPers(),
                genDocPer.getAsuntoDoc(),
                genDocPer.getFecha(),
                genDocPer.getUsuDestinoDocPers(),
                genDocPer.getCodUniPadreInt(),
                genDocPer.getCodUniDepInt(),
                genDocPer.getReferenciaDocPers(),
                genDocPer.getCopiDocPers(),
                genDocPer.getIniDatosPers(),
                genDocPer.getCodTipoAnio(),
                genDocPer.getCodAnio(),
                genDocPer.getCodEstDocPers(),
                genDocPer.getDniUsuario(),
                genDocPer.getRutaDocumento());
        if (rs > 0) {
            rt = !rt;
        }
        return rt;
    }

    @Override
    public int getGeneraNroDocPers(String codDoc) {
        String rs = "0";
        JdbcTemplate jdbc = new JdbcTemplate(this.dataSource);
        rs = jdbc.queryForObject("select convert(int,(MAX(dp.NRO_TIPO_DOC_PERS ))) from TD_GEN_DOC_PERSONAL dp join TD_DOCUMENTO d on d.COD_TIPO_DOC=dp.COD_TIPO_DOC where d.COD_TIPO_DOC=?", new Object[]{codDoc}, String.class);
        if (rs == null) {
            rs = "0";
        }
        int rt = Integer.parseInt(rs);
        rt += 1;
        return rt;
    }

    @Override
    public int getGeneraCodGenDocPers() {
        String rs = "0";
        JdbcTemplate jdbc = new JdbcTemplate(this.dataSource);
        rs = jdbc.queryForObject("select convert(int,(MAX(NRO_EMISION_DOC_ADM ))) from TD_GEN_DOC_PERSONAL", String.class);
        if (rs == null) {
            rs = "0";
        }
        int rt = Integer.parseInt(rs);
        rt += 1;
        return rt;
    }

    //busqueda doc entrada
    @Override
    public List<Map> getDocBandejaEntrada(String dniDest, String Asunto, String fecha, String uniPad, String uniDep, String UPA, String USA, String UP) {
        JdbcTemplate jdbc = new JdbcTemplate(this.dataSource);
        List<Map> result = jdbc.query("select dp.*,d.*,ud.*,up.*,u.* from TD_GEN_DOC_PERSONAL dp "
                + "join TD_DOCUMENTO d on d.COD_TIPO_DOC=dp.COD_TIPO_DOC"
                + " join TD_UNID_PADRE_INTERNO up on dp.COD_UNI_PAD_INTER=up.COD_UNI_PAD_INTER"
                + " join TD_UNID_DEP_INTERNO ud on dp.COD_UNI_DEP_INT=ud.COD_UNID_DEP_INT"
                + " join TD_TIPOANIO ta on dp.COD_TIPO_ANNIO = ta.COD_TIPO_ANNIO"
                + " join TD_ESTADO_COD_PERS edp on edp.COD_EST_DOC_PERS=dp.COD_EST_DOC_PERS"
                + " join TD_REG_USUARIO u on u.DNI_USUARIO=dp.DNI_USUARIO"
                + " where dp.USU_DESTINO_DOC_PERS=?"
                + " and dp.ASUNTO_DOC_PERS like(?) and dp.FECHA_DOC_PERS like(?)"
                + " and up.NOM_UNI_PAD_INTER like(?) and ud.NOM_DEP_INTERNO like(?)"
                + " and ( u.PRE_NOM_USU like(?) and u.PRIM_APE_USU like(?)"
                + " and u.SEGUN_APE_USU like(?)) order by dp.NRO_EMISION_DOC_ADM desc",
                new Object[]{dniDest, "%" + Asunto + "%", "%" + fecha + "%", "%" + uniPad + "%", "%" + uniDep + "%", "%" + UP + "%", "%" + UPA + "%", "%" + USA + "%"},
                new rowMapper());
        return result;
    }

    private class rowMapper implements RowMapper<Map> {

        @Override
        public Map mapRow(ResultSet rs, int i) throws SQLException {
            Map map = new HashMap();
            map.put("rem", rs.getString("PRIM_APE_USU") + " " + rs.getString("SEGUN_APE_USU") + ", " + rs.getString("PRE_NOM_USU"));
            map.put("tipDoc", rs.getString("TIPO_DOC"));
            map.put("numDoc", rs.getString("NRO_TIPO_DOC_PERS"));
            map.put("nomDoc", rs.getString("NOM_TIPO_DOC_PERS"));
            map.put("asu", rs.getString("ASUNTO_DOC_PERS"));
            map.put("fec", rs.getString("FECHA_DOC_PERS"));
            map.put("uniPad", rs.getString("NOM_UNI_PAD_INTER"));
            map.put("uniDep", rs.getString("NOM_DEP_INTERNO"));
            map.put("ani", rs.getString("COD_ANNIO"));
            map.put("est", rs.getString("COD_EST_DOC_PERS"));
            map.put("rut", rs.getString("RUTA_DOC"));
            return map;
        }
    }

}
